class BlogsController < ApplicationController
  verify  :method => :post, 
          :only => [ :insertar, :actualizar, :comentar ],
          :redirect_to => { :action => :listar }
          
  before_filter :validar_admin, :only => [ :listar_admin, :nuevo, :insertar, :editar, :actualizar, :ordenar, :borrar ]
  before_filter :cargar_blog, :only => [ :ficha, :editar, :actualizar, :borrar, :comentar ]
  
  def listar
    if es_admin?
      @blogs = Blog.find( :all, :order => 'orden asc' )
    else
      @blogs = Blog.find( :all, :order => 'orden asc' , :conditions => "estado = '#{Blog::PUBLICADO}'" )
    end
    respond_to do |wants|
      wants.html {  }
    end
  end
  
  def feed
    @blogs = Blog.find( :all, :order => 'orden asc' , :conditions => "estado = '#{Blog::PUBLICADO}'" )
    render :template => 'blogs/feed.rss.builder', :layout => false
  end
  
  def listar_admin
      @blogs = Blog.find( :all, :order => 'orden asc' )
  end
  
  def ficha     
  end
  
  def nuevo
    @blog = Blog.new
    @blog.estado = Blog::BORRADOR
  end
  
  def insertar
    @blog = Blog.new( params[:blog] )
    @blog.actualizar_imagenes( params["imagenes_ids"] )
    
    if @blog.save
      flash[:info] = 'Post creado muy bien.'
      redirect_to blogs_ficha_url( @blog.titulo_sanitizado )
    else
      flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
      render :action => 'nuevo'
    end
  end
  
  def editar
  end
  
  def actualizar
    @blog.update_attributes( params[:blog] )
    @blog.actualizar_imagenes( params["imagenes_ids"] )
    
    logger.info( "imagenes_ids: #{params['imagenes_ids']}" ) 
    
    if @blog.save
      flash[:info] = 'Post actualizado muy bien.'
      redirect_to blogs_ficha_url( @blog.titulo_sanitizado )
    else
      flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
      render :action => 'editar'
    end    
  end
  
  def borrar    
    if @blog.destroy
      flash[:info] = 'Post borrado muy bien.'
      redirect_to blogs_url
    else
      flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
      render :action => 'listar'
    end
  end
  
  # def comentar
  #   @blog = Blog.find_by_titulo_sanitizado( params[:titulo_sanitizado] )
  #   comentario = Comment.new(params[:comentario])
  #   @blog.add_comment comentario
  #   if comentario.save
  #     Cartero.deliver_nuevo_comentario_en_blog( comentario, @blog )
  # 
  #     flash[:info] = "Comentario añadido con éxito"
  #     redirect_to :action => 'ficha'
  #   else
  #     flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
  #     redirect_to :action => 'ficha'
  #   end
  # end
  
  def comentar
    comentario = Comment.new(params[:comentario])
    @blog.add_comment comentario
    if comentario.save
      Cartero.deliver_nuevo_comentario_en_blog( comentario, @blog )

      # flash[:info] = "Comentario añadido con éxito"
      render :partial => 'comentarios/comentario', :locals => { :comment => comentario, :ajax => true }
    else
      # flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
      render :partial => 'comentarios/comentario_error', :locals => { :comment => comentario, :ajax => true }
    end
  end
  
  def ordenar
    params["orden"].each_with_index do |id, index|
      blog = Blog.find_by_id( id );
      blog.orden = (index+1) * 10
      blog.save
    end
    
    flash[:info] = "El orden se ha actualizado correctamente"
    redirect_to admin_blogs_listar_url
  end
  


  
  protected
    def menu_activado
      @menu_activado = 'blogs'
    end
    
    def cargar_blog
      if es_admin?
        @blog = Blog.find_by_titulo_sanitizado( params[:titulo_sanitizado] )
      else
        @blog = Blog.find_by_titulo_sanitizado_and_estado( params[:titulo_sanitizado], Blog::PUBLICADO )
      end

      if not @blog
        render_404
      end
    end
  
end